home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 43 / Amiga Format CD43 (1999)(Future Publishing)(GB)(Track 1 of 2)[!][issue 1999-09].iso / -serious- / comms / other / pegmail / source / converter.c next >
C/C++ Source or Header  |  1999-06-14  |  4KB  |  175 lines

  1.  
  2. //----------------------------------------------------------------------------
  3. // wczytaj (polish :)) loads pl into bufor - dl length, returns length or 0
  4. //----------------------------------------------------------------------------
  5. static unsigned long wczytaj(STRPTR pl,char *bufor,unsigned long dl)
  6. {
  7. long fh;
  8. long res;
  9. APTR buf;
  10. buf=(APTR)bufor;
  11. fh=Open(pl,MODE_OLDFILE);
  12. if (fh)
  13.     {
  14.        res=Read(fh,buf,dl);
  15.       Close(fh);
  16.         if (res==NULL) return 0;
  17.    }
  18. return dl;
  19. }
  20.  
  21. //----------------------------------------------------------------------------
  22. // dlugosc (polish again :)   returns length of file 'plik' or -1 when plik
  23. //                            doesn't exists.
  24. //----------------------------------------------------------------------------
  25.  
  26. static unsigned long dlugosc(STRPTR plik)
  27. {
  28. BOOL res;
  29. BPTR lk;
  30. unsigned long wlk;
  31. struct FileInfoBlock *fib;                          //wskaznik na strukture fib
  32. //----
  33. lk=Lock(plik,ACCESS_READ);
  34. if (lk) {
  35.       fib = AllocDosObject(DOS_FIB,NULL);           //alokacja fib'a
  36.         res=Examine(lk,fib);                          //sprawdzenie locka -> FIB
  37.         UnLock(lk);
  38.         wlk=fib->fib_Size;                            //fib_Size zawiera dlugosc
  39.         FreeDosObject(DOS_FIB,fib);
  40.       return wlk;
  41.       }
  42. return -1;
  43. }
  44.  
  45.  
  46. #define E_NO_S_FILE -1   // no file / 0 size
  47. #define E_NO_MEM -2    // no memory
  48. #define E_NO_D_FILE -3    // no dest file
  49. #define E_CANT_LOAD -4    // can't load source file
  50. #define E_NOT_PEG -5    // can't load source file
  51.  
  52. static long konwertuj(STRPTR source, STRPTR dest)
  53. {
  54. static unsigned long wlk;
  55. static unsigned long res;
  56. long i=0;
  57. static long ret=0;
  58. static char *buf;
  59. static char *p, *p1, *p2, *p3, *p4;
  60. static char adr[200], dtyg[20], mi[10], dz[10], cz[20], rok[10];
  61. static BPTR fh;
  62. static char pom[500];
  63.  
  64.  
  65. wlk = dlugosc(source);
  66. if (wlk > 0)
  67. {
  68.     buf = AllocVec( wlk+4, MEMF_ANY);
  69.     if (buf)
  70.    {
  71.         res = wczytaj(source, buf, wlk);
  72.         if (res)
  73.         {                                                  // MAIN LOOP
  74.          buf[wlk]=0;
  75.          p=buf;
  76.          p1=strstr(p,"-- End --");
  77.             if (p1)
  78.          {
  79.                fh = Open(dest, MODE_NEWFILE);
  80.                 if (fh)
  81.                {
  82.                do
  83.                  {
  84.                      p1=strstr(p,"-- End --");
  85.                    if (p<buf+wlk-100)
  86.                         {
  87.                             i++;
  88.                             p2=strstr(p,"From:");               // szukam "From:"
  89.                        p3=strchr(p2,'<');                    //
  90.                       p4=strchr(p3,'>');                    //wycinam adres
  91.                        strncpy(adr,p3+1,p4-p3-1);       // kopiuje adres do adr
  92.                        adr[p4-p3-1]=0;                  // wstawiam \x00
  93.                         p2=strstr(p,"Date:");
  94.                         p3=strchr(p2,',');
  95.                         strncpy(dtyg,p3-3,3);
  96.                         dtyg[3]=0;
  97.                           p4=strchr(p3+2,' ');
  98.                          strncpy(dz,p3+2,p4-p3-2);
  99.                        strncpy(mi,p4+1,3);
  100.                        dz[p4-p3-2]=0;
  101.                        mi[3]=0;
  102.                           p3=strchr(p4+5,' ');
  103.                        strncpy(rok,p4+5,p3-p4-5);
  104.                           rok[p3-p4-5]=0;
  105.                        p4=strchr(p3+1,' ');
  106.                          strncpy(cz,p3+1,p4-p3-1);
  107.                          cz[p4-p3-1]=0;
  108.                          sprintf(pom, "From %s %s %s %s %s %s\n",adr, dtyg, mi, dz, cz, rok);
  109.                          Write(fh, pom, strlen(pom) );
  110.                          Write(fh, p, p1-p);
  111.                     }
  112.                         p=p1+11;
  113.                   } while (p1 != NULL);
  114.                  ret=(long)i;
  115.                    Close(fh);
  116.                 } else ret = E_NO_D_FILE;  // !fh
  117.             } else ret = E_NOT_PEG;         // nie jest to plik pegasusa...
  118.       } else ret = E_CANT_LOAD;           // !res
  119.          FreeVec(buf);
  120.     } else ret = E_NO_MEM;                     // !buf
  121. } else ret = E_NO_S_FILE;                 // !wlk
  122.  
  123. return ret;
  124.  
  125. }
  126.  
  127.  
  128. static long cut13(STRPTR plik)
  129. {
  130. static unsigned long wlk;
  131. static unsigned long res;
  132. static long ret=0;
  133. static BPTR fh;
  134.  
  135. char *buf, *p, *p1;
  136.  
  137. wlk = dlugosc(plik);
  138.  
  139. if (wlk > 0)
  140. {
  141.     buf = AllocVec( wlk+4, MEMF_ANY);
  142.         if (buf)
  143.        {
  144.       res = wczytaj(plik, buf, wlk);
  145.             if (res)
  146.             {
  147.           fh = Open(plik, MODE_NEWFILE);
  148.                 if (fh)
  149.             {
  150.                 p=buf;
  151.  
  152.                do
  153.                   {
  154.                 p1=strchr(p,'\r');
  155.                     if (p1)
  156.                 {
  157.                     Write(fh,p,p1-p);
  158.                     p=p1+1;
  159.                 }
  160.                else if (p < buf+wlk) Write(fh,p,buf+wlk-p);
  161.  
  162.               } while (p1 != NULL);
  163.  
  164.             Close(fh);
  165.                  } else ret =  E_NO_D_FILE;
  166.          } else ret =  E_NO_S_FILE;
  167.         FreeVec(buf);
  168.         } else ret = E_NO_MEM;
  169. } else ret= E_NO_S_FILE;
  170. return ret;
  171. }
  172.  
  173.  
  174.  
  175.